package ar.unrn.tp1.model;

import java.util.Date;
import java.util.Set;

import org.joda.time.DateTime;

public class Revista implements Comparable<Revista> {

	//Hibernate necesita esto
	private String id;
	
	private DateTime edicion;
	private Set<Articulo> articulos;
	
	public Revista(DateTime edicion, Set<Articulo> articulos) {
		this.edicion = edicion;
		this.articulos = articulos;
	}

	public int cantidadDeArticulosCuyoTituloContiene(String palabra) {
		int cantidad = 0;
		for (Articulo articulo : articulos) {
			if (articulo.contieneEnElTitulo(palabra)) {
				cantidad++;
			}
		}
		return cantidad;
	}

	public int cantidadDeArticulosPorAutor(String nombreAutor) {
		int cantidad = 0;
		for (Articulo articulo : articulos) {
			if (articulo.fueEscritoPor(nombreAutor)) {
				cantidad++;
			}
		}
		return cantidad;
	}
	
	public boolean esEdicion(DateTime edicion) {
		return this.edicion.toDate().equals(edicion.toDate());
	}

	public boolean hablaSobreElTema(String tema) {
		for (Articulo articulo : articulos) {
			if (articulo.hablaSobreElTema(tema)) {
				return true;
			}
		}
		return false;
	}
	
	public Date getEdicion() {
		return edicion.toDate();
	}
	
	public Set<Articulo> getArticulos() {
		return articulos;
	}

	// solo requerido por Hibernate
	@SuppressWarnings("unused")	
	private Revista() { }

	// solo requerido por Hibernate
	@SuppressWarnings("unused")
	private String getId() {
		return id;
	}

	// solo requerido por Hibernate
	@SuppressWarnings("unused")	
	private void setId(String id) {
		this.id = id;
	}


	// solo requerido por Hibernate
	@SuppressWarnings("unused")	
	private void setEdicion(Date edicion) {
		this.edicion = new DateTime(edicion);
	}

	// solo requerido por Hibernate
	@SuppressWarnings("unused")	
	private void setArticulos(Set<Articulo> articulos) {
		this.articulos = articulos;
	}

	@Override
	public int compareTo(Revista revista) {
		return this.edicion.toDate().compareTo(revista.edicion.toDate());
	}

	public Integer cantidadDeArticulos() {
		return articulos.size();
	}
}
